package com.winning.devops.demo.annotation.vlidate;

import com.winning.devops.demo.annotation.TestConstraint;
import com.winning.devops.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * @author chensj
 * @title 自定义校验逻辑所在的处理类
 * 1、在注解上面使用 @Constraint(validatedBy = TestConstraintValidator.class)指定的
 * 2、ConstraintValidator<A extends Annotation, T>
 *     第一个参数是指定使用的是那个注解
 *     第二个参数指定验证的数据类型，String、Long等,或者使用Object 通用
 *
 *     可以使用spring的注解注入参数,不用增加@Component等注解，spring自动将当前类注入
 * @project winning-spring-security
 * @package com.winning.devops.demo.annotation.vlidate
 * @date: 2019-05-12 上午12:06
 */
public class TestConstraintValidator implements ConstraintValidator<TestConstraint,Object> {
    /**
     *
     */
    @Autowired
    private HelloService helloService;
    /**
     * 初始化
     * @param constraintAnnotation
     */
    @Override
    public void initialize(TestConstraint constraintAnnotation) {
        System.out.println(getClass()+"  init ");
    }

    /**
     * 书写校验逻辑
     * @param value 校验的值
     * @param context 上下文
     * @return true/false  true校验通过  false校验不通过
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        System.out.println(value);
        helloService.hello(getClass().getName());
        return false;
    }
}
